Container-Optimized OS
Chromium OS ベース、GKE のデフォルトのノードイメージでもある Links
パスごとの書き込みポリシー
ルート パーティション: 読み取り専用としてマウントされます。
ステートフル パーティション: 書き込み可能でステートフルです。
ステートレス パーティション: 書き込み可能ですが、リブート時に内容が保存されません。
パスごとのパーティションが書いてある
cloud-init
インスタンスメタデータの user-data の値が cloud-init として解釈される
GPU 使うならドライバは自分で入れる
code:cloud-init
runcmd:
- cos-extensions install gpu
みんな docker コマンド使える
デフォルトでは、cos イメージ上で Compute Engine が管理するすべてのユーザー アカウントが docker グループに追加されます。これにより、どのユーザーもルート権限なしで docker コマンドを実行できます。
/usr/bin/toolbox
パッケージマネージャとかもなくて toolbox でやる世界観
Node Problem Detector
Container-Optimized OS マイルストーン 88 以降では、カスタム メタデータ セクションで google-monitoring-enabled の値を true に設定することで、Node Problem Detector を有効にできます。
LTS で最新は 85 なので cloud-init の runcmd などで systemctl start node-problem-detector する beta は 89, dev は 93 系なので metadata から使うのが楽
デフォルトの設定は /etc/node_problem_detector にある
code:ls -l /node_problem_detector
/etc/node_problem_detector $ ls -l
total 16
-rw-r--r-- 1 root root 451 Feb 5 04:11 docker-monitor.json
-rw-r--r-- 1 root root 1575 Feb 5 04:11 kernel-monitor.json
-rw-r--r-- 1 root root 208 Feb 5 04:11 stackdriver-exporter.json
-rw-r--r-- 1 root root 1467 Feb 5 04:11 system-stats-monitor.json
Node Problem Detector は、Compute Engine インスタンスのモニタリング対象リソースに対する指標のリストを報告します。指標は、compute.googleapis.com/guest/ の接頭辞が付けられて Monitoring 指標の一覧に記載されています
Terraform からプロビジョニングした時明示的にサービスアカウント指定しないと設置されない
シャットダウンスクリプトの様子
$ sudo journalctl -u google-startup-scripts.service
$ sudo journalctl -u google-shutdown-scripts.service
COS では /var/log/journal 以下に永続化されていて過去のものも見れる
シャットダウンスクリプトで docker 止めなくていい
コンテナを安全に止めようと思って docker stop ... をシャットダウンスクリプトに書いていたけど
インスタンスを停止しようとしたら systemd が docker daemon を止めている様子が journalctl -u docker に残っている
なので shutdown script で docker コマンド叩いても dockerd が居ないので失敗する
シャットダウン時に各サービスを停止するのは systemd がやっている?